package src;

import java.util.ArrayList;
import java.util.Objects;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author JMix
 */
public class Ramo {
    
    String nombre;
    String rutaFicha;
    int nivel;
    String periodo;
    int creditos;
    int hrsPresenciales;
    int hrsNoPresenciales;
    String tipo;
    ArrayList<Ramo> ramosRequisitos;
    int posicionX;
    int posicionY;
    int alto;
    int ancho;

    SituacionRamo situacionRamo;
    public Ramo(String nombre, int nivel, String periodo,int creditos, int hrsPresenciales, int hrsNoPresenciales, String tipo, String rutaFicha) {
        this.nombre = nombre;
        this.nivel = nivel;
        this.periodo = periodo;
        this.creditos = creditos;
        this.hrsPresenciales = hrsPresenciales;
        this.hrsNoPresenciales = hrsNoPresenciales;
        this.tipo = tipo;
        this.ramosRequisitos = new ArrayList();
        this.rutaFicha = rutaFicha;
        this.situacionRamo = SituacionRamo.POR_CURSAR;
    }
    public void agregarCoordenadas(int x, int y, int alto, int ancho){
        this.setPosicionX(x);
        this.setPosicionY(y);
        this.setAlto(alto);
        this.setAncho(ancho);
    }
    
    public String getNombre() {
        return this.nombre;
    }
    
     public void setNombre(String texto){
        this.nombre = texto;
    }
    
    public void agregarRequisito(Ramo ramo){
        this.ramosRequisitos.add(ramo);
    }

    public void imprimir() {
        System.out.println("nombre = " + nombre);
        System.out.println("nivel = " + nivel);
        System.out.println("creditos = " + creditos);
        System.out.println("hrsPresenciales = " + hrsPresenciales);
        System.out.println("hrsNoPresenciales = " + hrsNoPresenciales);
        System.out.println("tipo = " + tipo);
        System.out.println("rutaficha = " + rutaFicha);
    }

    public ArrayList<Ramo> getRamosRequisitos() {
        return ramosRequisitos;
    }

    /**
     * Entrega tipo de formacion del ramo, ya sea:
     * Formacion Fundamental FF.
     * Formacion Disciplinaria FD.
     * @return tipo ramo
     */
    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public int getNivel() {
        return this.nivel;
    }
    
    void setRequisitos(ArrayList<Ramo> ramosRequisitos) {
        this.ramosRequisitos = ramosRequisitos;
    }

    public int getCreditos() {
        return this.creditos;
    }
    
    public String getRutaFicha() {
        return this.rutaFicha;
    }

    public int getHrsPresenciales() {
        return this.hrsPresenciales;
    }

    public int getHrsNoPresenciales() {
        return this.hrsNoPresenciales;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Ramo other = (Ramo) obj;
        if (this.hashCode() != obj.hashCode())
            return false;
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 97 * hash + Objects.hashCode(this.nombre);
        hash = 97 * hash + this.nivel;
        hash = 97 * hash + Objects.hashCode(this.periodo);
        hash = 97 * hash + this.creditos;
        hash = 97 * hash + this.hrsPresenciales;
        hash = 97 * hash + this.hrsNoPresenciales;
        hash = 97 * hash + Objects.hashCode(this.rutaFicha);
        hash = 97 * hash + Objects.hashCode(this.tipo);
        hash = 97 * hash + Objects.hashCode(this.ramosRequisitos);
        return hash;
    }

    public void setCredito(int creditos) {
        this.creditos = creditos;
    }
    
    public ArrayList<Ramo> getPreRequisitos(){
        return this.ramosRequisitos;
    }

    @Override
    public String toString(){
        return this.nombre;
    }

    void setNivel(int nivel) {
        this.nivel = nivel;
    }

    void setRutaFicha(String rutaFicha) {
        this.rutaFicha = rutaFicha;
    }
    
    public int cantPreRequisitos(){
        return this.ramosRequisitos.size();
    }

    public void setHrsPresenciales(int hrsPresenciales) {
        this.hrsPresenciales = hrsPresenciales;
    }

    public void setHrsNoPresenciales(int hrsNoPresenciales) {
        this.hrsNoPresenciales = hrsNoPresenciales;
    }
    public int getPosicionX() {
        return posicionX;
    }

    public void setPosicionX(int posicionX) {
        this.posicionX = posicionX;
    }

    public int getPosicionY() {
        return posicionY;
    }

    public void setPosicionY(int posicionY) {
        this.posicionY = posicionY;
    }

    public int getAlto() {
        return alto;
    }

    public void setAlto(int alto) {
        this.alto = alto;
    }

    public int getAncho() {
        return ancho;
    }

    public void setAncho(int ancho) {
        this.ancho = ancho;
    }

    public void setPeriodo( String periodo ){
        this.periodo = periodo;
    }
    
    /**
     * Retorna el periodo al que pertenece el ramo:
     * Trimestre 1, 2 ó 3.
     * Semestre 1 ó 2.
     * Anual.
     * @return periodo
     */
    public String getPeriodo(){
        return this.periodo;
    }
    public boolean tienePrerequisito(Ramo ramo) {
        return this.ramosRequisitos.contains(ramo);
    }

    public void eliminarPreRequisito(Ramo ramo) {
        this.ramosRequisitos.remove(ramo);
    }

    void eliminarPreRequisitos() {
        this.ramosRequisitos.clear();
    }
    public void setSituacionRamo(SituacionRamo situacion){
        this.situacionRamo = situacion;
    }

}
